{"id":109184,"date":"2017-12-28T10:54:39","date_gmt":"2017-12-28T18:54:39","guid":{"rendered":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/cognitive-services-with-powerapps-using-custom-connectors\/"},"modified":"2025-06-11T08:10:26","modified_gmt":"2025-06-11T15:10:26","slug":"cognitive-services-with-powerapps-using-custom-connectors","status":"publish","type":"post","link":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/cognitive-services-with-powerapps-using-custom-connectors\/","title":{"rendered":"Cognitive Services with PowerApps using Custom Connectors"},"content":{"rendered":"<p><a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/cognitive-services\/Welcome\" target=\"_blank\" rel=\"noopener\">Microsoft Cognitive Services<\/a> are a set of APIs, SDKs and services available to developers to make their applications more intelligent, engaging and discoverable. This blog is an attempt to share an approach for PowerApps makers to use these Cognitive Services using <a href=\"https:\/\/docs.microsoft.com\/en-us\/powerapps\/register-custom-api\" target=\"_blank\" rel=\"noopener\">custom connectors<\/a>.<\/p>\n<p>There is an out-of-the-box <a href=\"https:\/\/docs.microsoft.com\/en-us\/connectors\/cognitiveservicescomputervision\/\" target=\"_blank\" rel=\"noopener\">Computer Vision API connector<\/a>, however the API uses dynamic types, which are not supported in PowerApps yet. There is also an out-of-the-box <a href=\"https:\/\/docs.microsoft.com\/en-us\/connectors\/faceapi\/\" target=\"_blank\" rel=\"noopener\">Face API connector<\/a>, however it isn\u2019t much useful in enterprise scenarios yet, as it\u2019s an API Key based connector and when a PowerApps app created using this connector is shared with other users, each user has to bring <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/cognitive-services\/computer-vision\/vision-api-how-to-topics\/howtosubscribe\" target=\"_blank\" rel=\"noopener\">in their own API keys<\/a> for using the app.<\/p>\n<h3>\u00a0<\/h3>\n<h3>About this blog<\/h3>\n<p>In the approach described in this blog, the cognitive services APIs are called from <a href=\"https:\/\/azure.microsoft.com\/en-us\/services\/app-service\/api\/\" target=\"_blank\" rel=\"noopener\">an Azure API App<\/a>, using the client libraries which are just a C# client wrapper for the APIs. We shall be using the <a href=\"https:\/\/www.nuget.org\/packages\/Torutek.Microsoft.ProjectOxford.Face\/\" target=\"_blank\" rel=\"noopener\">Microsoft.ProjectOxford.Face<\/a> and <a href=\"https:\/\/www.nuget.org\/packages\/Microsoft.ProjectOxford.Vision\/\" target=\"_blank\" rel=\"noopener\">Microsoft.ProjectOxford.Vision<\/a> Nuget packages in our API app. I have shared <a href=\"https:\/\/aka.ms\/ImageUtilitiesCode\" target=\"_blank\" rel=\"noopener\">the complete source code for the API App<\/a> for download as well as the <a href=\"https:\/\/aka.ms\/CognitiveServicesPowerAppsDemo\" target=\"_blank\" rel=\"noopener\">PowerApps app file<\/a> to use &amp; test the APIs as well. I have also <a href=\"https:\/\/powerapps.microsoft.com\/en-us\/blog\/custom-api-for-image-upload\/\" target=\"_blank\" rel=\"noopener\">combined the code for uploading an image to Azure Blob storage<\/a> in this new API app \u2013 <strong>ImageUtilities<\/strong>, so that one can use all these functions together in an app if needed.<\/p>\n<p>First we shall create the necessary Azure Services (App Service, Blob Storage, Computer Vision API &amp; Face API), then publish the API App to Azure.<\/p>\n<p>Then, we shall register a new custom connector in PowerApps using the swagger definition from the API App.\u00a0<\/p>\n<p>Finally, we shall create the PowerApps app using this new custom connector.<\/p>\n<p>In PowerApps, when a maker shares an app created using a custom connector, the connector is automatically shared and hence other users can use the app (without needing to type in an API key). In the blog below, we shall also protect our API app endpoint with AAD and also register an app in Azure AD for the custom connector, so that other users can use their own AAD credentials to authenticate and get access to the APIs.<\/p>\n<p>\u00a0<\/p>\n<h3>Let\u2019s get started.<\/h3>\n<p>\u00a0<\/p>\n<p>Here are the steps :<\/p>\n<ol>\n<li><a href=\"#APIAppProject\">Create the API App project<\/a><\/li>\n<li><a href=\"#PublishToAzure\">Publish the API to Azure<\/a><\/li>\n<li><a href=\"#ProtectAAD\">Protect with the API with Azure AD authentication<\/a> (optional but highly recommended)<\/li>\n<li><a href=\"#ProtectPowerAppsAAD\">Register another app in Azure AD for the custom connector<\/a> (optional but highly recommended)<\/li>\n<li><a href=\"#RegisterCustomConnector\">Register a new custom connector in PowerApps<\/a><\/li>\n<li><a href=\"#CreatePowerApps\">Create a PowerApps App to use the connector<\/a><\/li>\n<li><a href=\"#SavePublish\">Save, Publish and Test the App<\/a><\/li>\n<\/ol>\n<p>\u00a0<\/p>\n<h3><a name=\"APIAppProject\">Create the API App project<\/a><\/h3>\n<p>I have chosen to use an API App for the custom connector versus Azure Functions primarily as API apps can generate <a href=\"https:\/\/swagger.io\/\" target=\"_blank\" rel=\"noopener\">the Swagger document<\/a> for use with PowerApps using the <a href=\"https:\/\/github.com\/domaindrivendev\/Swashbuckle\" target=\"_blank\" rel=\"noopener\">Swashbuckle<\/a> Nuget package. This auto generates the definitions for all the reference classes like <a href=\"https:\/\/github.com\/Microsoft\/Cognitive-Vision-Windows\/blob\/master\/ClientLibrary\/Contract\/AnalysisResult.cs\" target=\"_blank\" rel=\"noopener\">AnalysisResult<\/a> and others used by the APIs in the swagger document. Since I have used the Swashbuckle feature <a href=\"https:\/\/github.com\/domaindrivendev\/Swashbuckle#including-xml-comments\" target=\"_blank\" rel=\"noopener\">to include XML Comments<\/a> from my assembly to generate Summary and Description tags in swagger, it becomes quite handy for both the API registration and also for providing intelli-sense when authoring the functions from the PowerApps app.<\/p>\n<p>\u00a0<\/p>\n<p>You will need the following Azure Services setup before you can complete this step:<\/p>\n<ul>\n<li>Azure Subscription (you can <a href=\"https:\/\/azure.microsoft.com\/en-us\/free\/\" target=\"_blank\" rel=\"noopener\">setup your free azure account with a $200 credit<\/a> to use in any Azure product for 30 days)<\/li>\n<li>Azure Blob Storage<\/li>\n<li>Create blob storage container named \u201cimages\u201d to store the Images that you may upload<\/li>\n<li>Create a Computer Vision API service and <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/cognitive-services\/computer-vision\/vision-api-how-to-topics\/howtosubscribe\" target=\"_blank\" rel=\"noopener\">obtain subscription keys<\/a> (It is free to <a href=\"https:\/\/azure.microsoft.com\/en-us\/try\/cognitive-services\/?api=computer-vision\" target=\"_blank\" rel=\"noopener\">signup<\/a>). Note down the subscription key and the address of the endpoint \u2013 for e.g. : <a href=\"https:\/\/westus.api.cognitive.microsoft.com\/vision\/v1.0\/\" title=\"https:\/\/westus.api.cognitive.microsoft.com\/vision\/v1.0\/\">https:\/\/westus.api.cognitive.microsoft.com\/vision\/v1.0\/<\/a><\/li>\n<li>Create a Face API service and <a href=\"https:\/\/azure.microsoft.com\/en-us\/try\/cognitive-services\/\" target=\"_blank\" rel=\"noopener\">obtain subscription keys<\/a> (It is free to <a href=\"https:\/\/azure.microsoft.com\/en-us\/try\/cognitive-services\/?api=computer-vision\" target=\"_blank\" rel=\"noopener\">signup<\/a>). Note down the subscription key and the address of the endpoint \u2013 for e.g. : <a href=\"https:\/\/westus.api.cognitive.microsoft.com\/face\/v1.0\/\" title=\"https:\/\/westus.api.cognitive.microsoft.com\/vision\/v1.0\/\">https:\/\/westus.api.cognitive.microsoft.com\/face\/v1.0\/<\/a><\/li>\n<\/ul>\n<p>\u00a0<\/p>\n<p>Download the code for the API App from this location: <a href=\"https:\/\/aka.ms\/ImageUtilitiesCode\" title=\"https:\/\/aka.ms\/ImageUtilitiesCode\">https:\/\/aka.ms\/ImageUtilitiesCode<\/a>\u00a0<\/p>\n<p>\u00a0<\/p>\n<p>If you haven\u2019t created an API App for use with PowerApps, I recommend <a href=\"https:\/\/docs.microsoft.com\/en-us\/powerapps\/customapi-web-api-tutorial\" target=\"_blank\" rel=\"noopener\">reading this tutorial<\/a> to familiarize with the basic concepts. I have used <a href=\"https:\/\/docs.microsoft.com\/en-us\/visualstudio\/install\/install-visual-studio\" target=\"_blank\" rel=\"noopener\">Visual Studio 2017<\/a> for the code used in this app.\u00a0 Extract the contents of the zip file and open the <strong>ImageUtilities.sln<\/strong> file to launch the project in Visual Studio.\u00a0 We have added the following Controllers to correspond to the respective APIs from Azure Cognitive Services. The list of APIs for reference is given below:<\/p>\n<ul>\n<li>AnalyzeController \u2013&gt; <a href=\"https:\/\/westus.dev.cognitive.microsoft.com\/docs\/services\/56f91f2d778daf23d8ec6739\/operations\/56f91f2e778daf14a499e1fa\" target=\"_blank\" rel=\"noopener\">Analyze Image<\/a><\/li>\n<li>DescribeController \u2013&gt; <a href=\"https:\/\/westus.dev.cognitive.microsoft.com\/docs\/services\/56f91f2d778daf23d8ec6739\/operations\/56f91f2e778daf14a499e1fe\" target=\"_blank\" rel=\"noopener\">Describe Image<\/a><\/li>\n<li>HandwrittenTextController \u2013&gt; <a href=\"https:\/\/westus.dev.cognitive.microsoft.com\/docs\/services\/56f91f2d778daf23d8ec6739\/operations\/587f2c6a154055056008f200\" target=\"_blank\" rel=\"noopener\">Recognize Handwritten Text<\/a><\/li>\n<li>OCRController \u2013&gt; <a href=\"https:\/\/westus.dev.cognitive.microsoft.com\/docs\/services\/56f91f2d778daf23d8ec6739\/operations\/56f91f2e778daf14a499e1fc\" target=\"_blank\" rel=\"noopener\">OCR<\/a><\/li>\n<li>ImageTagsController \u2013&gt; <a href=\"https:\/\/westus.dev.cognitive.microsoft.com\/docs\/services\/56f91f2d778daf23d8ec6739\/operations\/56f91f2e778daf14a499e1ff\" target=\"_blank\" rel=\"noopener\">Tag Image<\/a><\/li>\n<li>ThumbnailController \u2013&gt; <a href=\"https:\/\/westus.dev.cognitive.microsoft.com\/docs\/services\/56f91f2d778daf23d8ec6739\/operations\/56f91f2e778daf14a499e1fb\" target=\"_blank\" rel=\"noopener\">Get Thumbnail<\/a>\u00a0<\/li>\n<\/ul>\n<p>\u00a0<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"610\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/18697e57-8dce-44e0-9445-1f92846efe54.png\" style=\"border-width: 0px; margin: 0px auto; padding-top: 0px; padding-right: 0px; padding-left: 0px; float: none; display: block; background-image: none;\" title=\"image\" width=\"391\"\/><\/p>\n<p>\u00a0<\/p>\n<p>Open the <strong>Web.config<\/strong> file and modify the highlighted values in the Web.Config file with corresponding values from your Azure services.<\/p>\n<p>For the StorageConnectionString \u2013 use the format DefaultEndpointsProtocol=https;AccountName=myAccount;AccountKey=myKey;<\/p>\n<p>Use the API keys for the Computer Vision and Face APIs that you had noted down earlier. Also populate the root end points for both the services as well.<\/p>\n<p>\u00a0<\/p>\n<pre class=\"prettyprint\">\n  &lt;appSettings&gt;\n    &lt;!--&lt;add key=\"StorageConnectionString\" value=\"UseDevelopmentStorage=true\" \/&gt;--&gt;\n    &lt;add key=\"StorageConnectionString\" value=\"DummyValue\" \/&gt;\n    &lt;add key=\"VisionAPIKey\" value=\"DummyValue\" \/&gt;\n    &lt;add key=\"FaceAPIKey\" value=\"DummyValue\" \/&gt;\n    &lt;add key=\"VisionAPIRoot\" value=\"https:\/\/westus.api.cognitive.microsoft.com\/vision\/v1.0\"\/&gt;\n    &lt;add key=\"FaceAPIRoot\" value=\"https:\/\/westus.api.cognitive.microsoft.com\/face\/v1.0\"\/&gt;\n  &lt;\/appSettings&gt;<\/pre>\n<pre class=\"prettyprint\">\n\u00a0<\/pre>\n<p>Compile &amp; test the APIs locally using the SwaggerUI (CTRL + F5 and navigating to <a href=\"http:\/\/localhost:64279\/swagger\" title=\"http:\/\/localhost:64279\/\">http:\/\/localhost:64279\/<\/a><a href=\"http:\/\/localhost\/swagger\">swagger<\/a>).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"610\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/3acaaad8-fad3-40ef-abc9-a9d77e6a13e6.png\" style=\"border-width: 0px; margin: 0px auto; padding-top: 0px; padding-right: 0px; padding-left: 0px; float: none; display: block; background-image: none;\" title=\"image\" width=\"553\"\/><\/p>\n<p>\u00a0<\/p>\n<h3>\u00a0<\/h3>\n<h3><a name=\"PublishToAzure\">Publish the API to Azure<\/a><\/h3>\n<p>Once satisfied, publish the app to Azure. Refer to <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/app-service\/app-service-web-get-started-dotnet?view=azure-dotnet#publish-to-azure\" target=\"_blank\" rel=\"noopener\">this article for a good tutorial for Publishing to Azure with Visual Studio<\/a>.\u00a0 Test your API end point by browsing to <a href=\"https:\/\/&lt;yoursitename&gt;.azurewebsites.net\/swagger\/\">https:\/\/&lt;yoursitename&gt;.azurewebsites.net\/swagger\/<\/a>.<\/p>\n<p>\u00a0<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"610\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/a2ee994f-956f-49d5-980b-9ad8ce2d484b.png\" style=\"border-width: 0px; margin: 0px auto; padding-top: 0px; padding-right: 0px; padding-left: 0px; float: none; display: block; background-image: none;\" title=\"image\" width=\"554\"\/><\/p>\n<p>Download the swagger document. Browse to the Swagger URL mentioned in the Swagger UI of your API (<a href=\"https:\/\/&lt;yoursitename&gt;.azurewebsites.net\/swagger\/docs\/v1\">https:\/\/&lt;yoursitename&gt;.azurewebsites.net\/swagger\/docs\/v1<\/a>) in IE and download the json file onto your disk and name it <strong>ImageUtilitiesSwaggerv1.json<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"44\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/cb045799-8954-4eab-9abe-10cc6e704a72.png\" style=\"border-width: 0px; margin: 0px auto; padding-top: 0px; padding-right: 0px; padding-left: 0px; float: none; display: block; background-image: none;\" title=\"image\" width=\"610\"\/><\/p>\n<h3><a name=\"#ProtectAAD\">Protect the API with Azure AD Authentication<\/a><\/h3>\n<p>Follow the steps mentioned in <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/app-service\/app-service-mobile-how-to-configure-active-directory-authentication\" target=\"_blank\" rel=\"noopener\">this article<\/a> to secure your API with Azure Active Directory. If your Azure Subscription is in a different directory than your organizational Azure AD (like I had), follow the steps mentioned in <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/app-service\/app-service-mobile-how-to-configure-active-directory-authentication#a-nameadvanced-aalternative-method-manually-configure-azure-active-directory-with-advanced-settings\" target=\"_blank\" rel=\"noopener\">the Alternative Method<\/a> but make sure that you do the app registration in your organization\u2019s Active Directory (Tip: you can open the AAD specific <a href=\"https:\/\/aad.portal.azure.com\">https:\/\/aad.portal.azure.com<\/a> portal in another browser tab or window).\u00a0 I have registered my app as <strong>ImageUtilitiesAPI <\/strong>in my active directory.<\/p>\n<p>\u00a0<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"430\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/350bc839-551f-421d-8b38-4f32f806a783.png\" style=\"border-width: 0px; margin: 0px auto; padding-top: 0px; padding-right: 0px; padding-left: 0px; float: none; display: block; background-image: none;\" title=\"image\" width=\"610\"\/><\/p>\n<p>\u00a0<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"610\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/473ea955-f28f-4372-af42-af5a88cad526.png\" style=\"border-width: 0px; margin: 0px auto; padding-top: 0px; padding-right: 0px; padding-left: 0px; float: none; display: block; background-image: none;\" title=\"image\" width=\"603\"\/><\/p>\n<p>\u00a0<\/p>\n<h3><a name=\"#ProtectPowerAppsAAD\">Register another app in Azure AD for the PowerApps custom connector<\/a><\/h3>\n<p>We now need to register a second application in AAD for the PowerApps connector. This is required to secure the PowerApps custom connector with AAD so that other users within the organization can use their own AAD credentials to authenticate against the connector for the app.\u00a0 I have registered this app as <strong>ImageUtilities_PAConnector<\/strong> in my Azure Active Directory.<\/p>\n<p>The second AAD application is used to secure the custom connector registration and acquire delegated access to the <strong>ImageUtilitiesAPI<\/strong> app protected by the first application. Name this one <strong>ImageUtilities_PAConnector<\/strong>.<\/p>\n<ul>\n<li>Sign-on URL: <code>https:\/\/login.windows.net<\/code><\/li>\n<li>Reply URL: <code>https:\/\/msmanaged-na.consent.azure-apim.net\/redirect<\/code><\/li>\n<li>Add permissions to have delegated access to <strong>ImageUtilitiesAPI<\/strong>.<\/li>\n<li>You need the application ID of this application later as well, so note it.<\/li>\n<li>Generate a client key and store is somewhere safe. We need this key later.<\/li>\n<\/ul>\n<p>\u00a0<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"268\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/7cb981d1-1446-4354-b1c4-908343188e57.png\" style=\"border-width: 0px; margin: 0px auto; padding-top: 0px; padding-right: 0px; padding-left: 0px; float: none; display: block; background-image: none;\" title=\"image\" width=\"610\"\/><\/p>\n<p>\u00a0<\/p>\n<p><a name=\"RegisterCustomConnector\">Register a new Custom Connector in PowerApps<\/a><\/p>\n<p>Browse to <a href=\"https:\/\/web.powerapps.com\/\" target=\"_blank\" rel=\"noopener\">the PowerApps portal<\/a>, and add a custom connector as described in this article: <a href=\"https:\/\/docs.microsoft.com\/en-us\/powerapps\/register-custom-api\" target=\"_blank\" rel=\"noopener\">Register and use custom connectors<\/a>. Note down the Environment name where you are creating the Custom connector.<\/p>\n<p>Once you have uploaded the OpenAPI (Swagger) file, the wizard auto-detects that you are using the AAD authentication for your web API.\u00a0 (If you are curious how, we have already added a security definitions in the SwaggerConfig file itself, using the c.OAuth2(&#8220;oauth2&#8221;) method)<\/p>\n<p>Configure the AAD authentication for the custom connector.<\/p>\n<ul>\n<li><strong>Client ID:<\/strong> Client ID of ImageUtilities_PAConnector<\/li>\n<li><strong>Secret:<\/strong> Client key of ImageUtilities_PAConnector<\/li>\n<li><strong>Login URL:<\/strong> <a href=\"https:\/\/login.windows.net\">https:\/\/login.windows.net<\/a><\/li>\n<li><strong>ResourceUri:<\/strong> Application ID of ImageUtilitiesAPI<\/li>\n<\/ul>\n<p>You should be able to see all the actions and References imported from the swagger file in the Definition section as per screenshot below.<\/p>\n<p>\u00a0<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"610\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/93144e5d-e4fb-409f-823e-2d2c445aa33a.png\" style=\"border-width: 0px; margin: 0px auto; padding-top: 0px; padding-right: 0px; padding-left: 0px; float: none; display: block; background-image: none;\" title=\"image\" width=\"310\"\/><\/p>\n<p>\u00a0<\/p>\n<p>Click <strong>Create Connector <\/strong>to create the custom connector.<\/p>\n<p>\u00a0<\/p>\n<h3><a name=\"CreatePowerApps\">Create a PowerApps App to use the custom connector<\/a><\/h3>\n<p>Open <a href=\"https:\/\/web.powerapps.com\/\" target=\"_blank\" rel=\"noopener\">the PowerApps Portal<\/a>.\u00a0 Make sure that you have the same Environment selected as the one in which you created the Custom connector in the previous step.<\/p>\n<p>Click on Apps from the left nav bar.\u00a0<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"536\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/cbdd6f2e-119b-49c4-82d9-6cb89aadc274.png\" style=\"border-width: 0px; margin: 0px auto; padding-top: 0px; padding-right: 0px; padding-left: 0px; float: none; display: block; background-image: none;\" title=\"image\" width=\"218\"\/><\/p>\n<p>Download the PowerApps app resources from this location: <a href=\"https:\/\/aka.ms\/CognitiveServicesPowerAppsDemo\" title=\"https:\/\/aka.ms\/CognitiveServicesPowerAppsDemo\">https:\/\/aka.ms\/CognitiveServicesPowerAppsDemo<\/a>.\u00a0 Right click the downloaded zip file (on windows) and select Properties to unblock the contents by checking the Unblock checkbox, before extracting the contents of the zip file.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"610\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/5f794998-e43c-4fa1-8d49-f4d0d160d7f4.png\" style=\"border-width: 0px; margin: 0px auto; padding-top: 0px; padding-right: 0px; padding-left: 0px; float: none; display: block; background-image: none;\" title=\"image\" width=\"453\"\/><\/p>\n<p>Then click on <strong>Create an App <\/strong>from the top right. This will navigate you to the PowerApps web authoring site. Click on <strong>Open<\/strong> from the left nav, then click on <strong>Browse.<\/strong><\/p>\n<p>\u00a0<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"291\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/7dddf70e-dcbe-40d6-864e-6e0bb8c0442a.png\" style=\"border-width: 0px; margin: 0px auto; padding-top: 0px; padding-right: 0px; padding-left: 0px; float: none; display: block; background-image: none;\" title=\"image\" width=\"398\"\/><\/p>\n<p>Then select the <strong>CognitiveDemos.msapp <\/strong>file that you extracted from the downloaded zip file. This will load the PowerApps app in edit mode.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"321\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/d7ff347d-073d-4c18-8bc7-e22277a08452.png\" style=\"border-width: 0px; margin: 0px auto; padding-top: 0px; padding-right: 0px; padding-left: 0px; float: none; display: block; background-image: none;\" title=\"image\" width=\"610\"\/><\/p>\n<p>Click on <strong>View <\/strong>&gt; <strong>DataSources<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"100\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/8c544265-b259-4ba1-8487-a719d9ad690b.png\" style=\"border-width: 0px; margin: 0px auto; padding-top: 0px; padding-right: 0px; padding-left: 0px; float: none; display: block; background-image: none;\" title=\"image\" width=\"610\"\/><\/p>\n<p>Click on <strong>+ Add data source<\/strong><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"223\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/1294c5ac-a8ca-4c98-a116-9e2bc024ce4d.png\" style=\"border-width: 0px; margin: 0px auto; padding-top: 0px; padding-right: 0px; padding-left: 0px; float: none; display: block; background-image: none;\" title=\"image\" width=\"324\"\/><\/p>\n<p>Click on <strong>+ New connection<\/strong>, and select the <strong>ImageUtilitiesAPI<\/strong> (custom connector that you created earlier). Authenticate using your AAD credentials to add it to your application.\u00a0 In case you are wondering the other two connections already present in the app, they are static data files imported from Excel. The source of the file is shared along with the PowerApps app file <strong>AppData.xlsx<\/strong>.<\/p>\n<p>\u00a0<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"92\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/395174ab-cc70-4fc8-9194-32db818d2708.png\" style=\"border-width: 0px; margin: 0px auto; padding-top: 0px; padding-right: 0px; padding-left: 0px; float: none; display: block; background-image: none;\" title=\"image\" width=\"318\"\/><\/p>\n<h3><a name=\"SavePublish\">Save, Publish and Test the app<\/a><\/h3>\n<p>\u00a0<\/p>\n<p>Click on <strong>File <\/strong>&gt; <strong>Save<\/strong> &gt; <strong>The cloud (Save to PowerApps) <\/strong>&gt; Provide a unique name to your app and click on <strong>Save<\/strong>. For every subsequent saves, you will have <a href=\"https:\/\/docs.microsoft.com\/en-us\/powerapps\/save-publish-app\" target=\"_blank\" rel=\"noopener\">to Publish your app<\/a>.\u00a0<\/p>\n<p>Let\u2019s run the app in Preview mode to test the app by click on F5 or the <strong>Preview the app<\/strong> button.\u00a0 There are 6 options to choose for the API that you want to call and 4 choices for selecting an image.<\/p>\n<p>Select <strong>Analyze Image <\/strong>&amp; <strong>Select from sample Image. <\/strong>This will display a gallery of sample images below for you to select. Select any one from the Gallery and click on <strong>Next <\/strong>to display the results.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"343\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/e863858a-4aed-4c68-8278-c46173193f4a.png\" style=\"margin: 0px auto; border: 0px currentColor; border-image: none; padding-top: 0px; padding-right: 0px; padding-left: 0px; float: none; display: block; background-image: none;\" title=\"image\" width=\"610\"\/><\/p>\n<p>\u00a0<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"340\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/c4bfc3c8-e5d4-4fd9-91a1-6392ff236a9b.png\" style=\"border-width: 0px; margin: 0px auto; padding-top: 0px; padding-right: 0px; padding-left: 0px; float: none; display: block; background-image: none;\" title=\"image\" width=\"610\"\/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"359\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/95d77498-6190-4c83-95e8-767eece5f3f7.png\" style=\"border-width: 0px; margin: 0px auto; padding-top: 0px; padding-right: 0px; padding-left: 0px; float: none; display: block; background-image: none;\" title=\"image\" width=\"610\"\/><\/p>\n<p>There are a lot of hidden nuggets in the app for you to discover and enjoy! Share the app with your colleagues by click on the Share button.\u00a0<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" alt=\"image\" border=\"0\" height=\"47\" src=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/282bb5ba-a955-427f-80f5-e5e58264bfe6.png\" style=\"border-width: 0px; margin: 0px auto; padding-top: 0px; padding-right: 0px; padding-left: 0px; float: none; display: block; background-image: none;\" title=\"image\" width=\"196\"\/><\/p>\n<p>\u00a0<\/p>\n<p>Please share your comments in the section below for any feedback.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>This blog is an attempt to share an approach for PowerApps makers to use Azure Cognitive Services using a custom connector in PowerApps apps. We shall use Azure API Apps to wrap around the Computer Vision API &#038; Face API in this app. We also have a function to upload files to a Blob storage location.<\/p>\n","protected":false},"author":100,"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":[3423],"job-role":[],"product":[3473],"property":[],"topic":[3421],"coauthors":[2098],"class_list":["post-109184","post","type-post","status-publish","format-standard","hentry","audience-it-professional","content-type-tips-and-guides","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>Cognitive Services with PowerApps using Custom Connectors - 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\/2017\/12\/28\/cognitive-services-with-powerapps-using-custom-connectors\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cognitive Services with PowerApps using Custom Connectors - Microsoft Power Platform Blog\" \/>\n<meta property=\"og:description\" content=\"This blog is an attempt to share an approach for PowerApps makers to use Azure Cognitive Services using a custom connector in PowerApps apps. We shall use Azure API Apps to wrap around the Computer Vision API &amp; Face API in this app. We also have a function to upload files to a Blob storage location.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/cognitive-services-with-powerapps-using-custom-connectors\/\" \/>\n<meta property=\"og:site_name\" content=\"Microsoft Power Platform Blog\" \/>\n<meta property=\"article:published_time\" content=\"2017-12-28T18:54:39+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-06-11T15:10:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/18697e57-8dce-44e0-9445-1f92846efe54.png\" \/>\n<meta name=\"author\" content=\"Pratap Ladhani\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Pratap Ladhani\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 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\/2017\/12\/28\/cognitive-services-with-powerapps-using-custom-connectors\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2017\/12\/28\/cognitive-services-with-powerapps-using-custom-connectors\/\"},\"author\":[{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/author\/pratap-ladhani\/\",\"@type\":\"Person\",\"@name\":\"Pratap Ladhani\"}],\"headline\":\"Cognitive Services with PowerApps using Custom Connectors\",\"datePublished\":\"2017-12-28T18:54:39+00:00\",\"dateModified\":\"2025-06-11T15:10:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2017\/12\/28\/cognitive-services-with-powerapps-using-custom-connectors\/\"},\"wordCount\":1692,\"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\/2017\/12\/28\/cognitive-services-with-powerapps-using-custom-connectors\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/18697e57-8dce-44e0-9445-1f92846efe54.png\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2017\/12\/28\/cognitive-services-with-powerapps-using-custom-connectors\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2017\/12\/28\/cognitive-services-with-powerapps-using-custom-connectors\/\",\"url\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2017\/12\/28\/cognitive-services-with-powerapps-using-custom-connectors\/\",\"name\":\"Cognitive Services with PowerApps using Custom Connectors - 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\/2017\/12\/28\/cognitive-services-with-powerapps-using-custom-connectors\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2017\/12\/28\/cognitive-services-with-powerapps-using-custom-connectors\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/18697e57-8dce-44e0-9445-1f92846efe54.png\",\"datePublished\":\"2017-12-28T18:54:39+00:00\",\"dateModified\":\"2025-06-11T15:10:26+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2017\/12\/28\/cognitive-services-with-powerapps-using-custom-connectors\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2017\/12\/28\/cognitive-services-with-powerapps-using-custom-connectors\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2017\/12\/28\/cognitive-services-with-powerapps-using-custom-connectors\/#primaryimage\",\"url\":\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/18697e57-8dce-44e0-9445-1f92846efe54.png\",\"contentUrl\":\"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/18697e57-8dce-44e0-9445-1f92846efe54.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2017\/12\/28\/cognitive-services-with-powerapps-using-custom-connectors\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Cognitive Services with PowerApps using Custom Connectors\"}]},{\"@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\/b65835b61629a2fd09f24a46fceb2bff\",\"name\":\"Pratap Ladhani\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/secure.gravatar.com\/avatar\/5618b02062e59f576de7da01b4a7df3f64188961e5588a611d8d09b7606c550f?s=96&d=mm&r=gef2fe6828f30df80244cfd43b7ca6b57\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/5618b02062e59f576de7da01b4a7df3f64188961e5588a611d8d09b7606c550f?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/5618b02062e59f576de7da01b4a7df3f64188961e5588a611d8d09b7606c550f?s=96&d=mm&r=g\",\"caption\":\"Pratap Ladhani\"},\"url\":\"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/author\/pladhani\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Cognitive Services with PowerApps using Custom Connectors - 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\/2017\/12\/28\/cognitive-services-with-powerapps-using-custom-connectors\/","og_locale":"en_US","og_type":"article","og_title":"Cognitive Services with PowerApps using Custom Connectors - Microsoft Power Platform Blog","og_description":"This blog is an attempt to share an approach for PowerApps makers to use Azure Cognitive Services using a custom connector in PowerApps apps. We shall use Azure API Apps to wrap around the Computer Vision API & Face API in this app. We also have a function to upload files to a Blob storage location.","og_url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/power-apps\/cognitive-services-with-powerapps-using-custom-connectors\/","og_site_name":"Microsoft Power Platform Blog","article_published_time":"2017-12-28T18:54:39+00:00","article_modified_time":"2025-06-11T15:10:26+00:00","og_image":[{"url":"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/18697e57-8dce-44e0-9445-1f92846efe54.png","type":"","width":"","height":""}],"author":"Pratap Ladhani","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Pratap Ladhani","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2017\/12\/28\/cognitive-services-with-powerapps-using-custom-connectors\/#article","isPartOf":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2017\/12\/28\/cognitive-services-with-powerapps-using-custom-connectors\/"},"author":[{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/author\/pratap-ladhani\/","@type":"Person","@name":"Pratap Ladhani"}],"headline":"Cognitive Services with PowerApps using Custom Connectors","datePublished":"2017-12-28T18:54:39+00:00","dateModified":"2025-06-11T15:10:26+00:00","mainEntityOfPage":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2017\/12\/28\/cognitive-services-with-powerapps-using-custom-connectors\/"},"wordCount":1692,"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\/2017\/12\/28\/cognitive-services-with-powerapps-using-custom-connectors\/#primaryimage"},"thumbnailUrl":"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/18697e57-8dce-44e0-9445-1f92846efe54.png","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2017\/12\/28\/cognitive-services-with-powerapps-using-custom-connectors\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2017\/12\/28\/cognitive-services-with-powerapps-using-custom-connectors\/","url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2017\/12\/28\/cognitive-services-with-powerapps-using-custom-connectors\/","name":"Cognitive Services with PowerApps using Custom Connectors - 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\/2017\/12\/28\/cognitive-services-with-powerapps-using-custom-connectors\/#primaryimage"},"image":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2017\/12\/28\/cognitive-services-with-powerapps-using-custom-connectors\/#primaryimage"},"thumbnailUrl":"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/18697e57-8dce-44e0-9445-1f92846efe54.png","datePublished":"2017-12-28T18:54:39+00:00","dateModified":"2025-06-11T15:10:26+00:00","breadcrumb":{"@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2017\/12\/28\/cognitive-services-with-powerapps-using-custom-connectors\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2017\/12\/28\/cognitive-services-with-powerapps-using-custom-connectors\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2017\/12\/28\/cognitive-services-with-powerapps-using-custom-connectors\/#primaryimage","url":"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/18697e57-8dce-44e0-9445-1f92846efe54.png","contentUrl":"https:\/\/pwrappscdn.azureedge.net\/mediahandler\/blog\/media\/PowerApps\/blog\/18697e57-8dce-44e0-9445-1f92846efe54.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/2017\/12\/28\/cognitive-services-with-powerapps-using-custom-connectors\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/"},{"@type":"ListItem","position":2,"name":"Cognitive Services with PowerApps using Custom Connectors"}]},{"@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\/b65835b61629a2fd09f24a46fceb2bff","name":"Pratap Ladhani","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/5618b02062e59f576de7da01b4a7df3f64188961e5588a611d8d09b7606c550f?s=96&d=mm&r=gef2fe6828f30df80244cfd43b7ca6b57","url":"https:\/\/secure.gravatar.com\/avatar\/5618b02062e59f576de7da01b4a7df3f64188961e5588a611d8d09b7606c550f?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5618b02062e59f576de7da01b4a7df3f64188961e5588a611d8d09b7606c550f?s=96&d=mm&r=g","caption":"Pratap Ladhani"},"url":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/author\/pladhani\/"}]}},"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\/109184","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\/100"}],"replies":[{"embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/comments?post=109184"}],"version-history":[{"count":1,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts\/109184\/revisions"}],"predecessor-version":[{"id":131138,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/posts\/109184\/revisions\/131138"}],"wp:attachment":[{"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/media?parent=109184"}],"wp:term":[{"taxonomy":"audience","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/audience?post=109184"},{"taxonomy":"content-type","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/content-type?post=109184"},{"taxonomy":"job-role","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/job-role?post=109184"},{"taxonomy":"product","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/product?post=109184"},{"taxonomy":"property","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/property?post=109184"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/topic?post=109184"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.microsoft.com\/en-us\/power-platform\/blog\/wp-json\/wp\/v2\/coauthors?post=109184"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}