{"id":38930,"date":"2020-04-20T11:50:38","date_gmt":"2020-04-20T18:50:38","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/premier-developer\/?p=38930"},"modified":"2020-03-27T12:04:18","modified_gmt":"2020-03-27T19:04:18","slug":"how-to-retrieve-all-work-items-associated-with-a-release-pipeline-using-azure-devops-api","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/premier-developer\/how-to-retrieve-all-work-items-associated-with-a-release-pipeline-using-azure-devops-api\/","title":{"rendered":"How to retrieve all work items associated with a release pipeline using Azure DevOps API"},"content":{"rendered":"<p>App Dev Manager <a href=\"https:\/\/www.linkedin.com\/in\/mahendar-madhavaram-533b0a9\/\">Mahendar Madhavaram<\/a> and Premier Field Engineer <a href=\"https:\/\/www.linkedin.com\/in\/eduardobottcher\/\">Eduardo Bottcher<\/a> explore how to retrieve all work items associated with a release pipeline using Azure DevOps API.<\/p>\n<hr \/>\n<p>One of the greatest features of using Boards, Repositories and Pipelines in Azure DevOps is the ability to link and associate work items to all sorts of coding and deployment elements such as commits, branches, pull requests, builds and releases. With those associations in place, it is possible to identify, for example, what work items were deployed on a given release or track what lines of code were involved in the last deployment to production. Those are all very valuable and strategic information you can use for auditing purposes or troubleshooting data to help diagnose an incident. Out of the Box, the tool can display those relations in various screens, like the Build Summary page or the Work Item Form but you can also use the Azure DevOps Rest API to pull that information for your specific scenarios. The good news is that Azure DevOps provides multiple endpoints and technologies to connect and query data.<\/p>\n<p>In this article we are going to learn how to retrieve all work items associated with a release pipeline using the Azure DevOps API.<\/p>\n<h2>Setting up the Work Items Associations<\/h2>\n<p>The goal here is to make sure the build and release pipeline definitions are configured to associate work items during the whole CI\/CD process. As code gets committed and built, tasks, user stories, bugs and other work items links should be created to each operation. That is the foundation to be able to report on those links later in this article.<\/p>\n<p>The first step is to make sure every code change is associated with a work item. This will link the work items with commits, branches and Pull requests. You can accomplish that by enabling a build policy to check for linked work items.<\/p>\n<ol>\n<li>Click the Repositories and the Branches Menu in the Azure DevOps Portal\n. <img decoding=\"async\" width=\"310\" height=\"344\" class=\"wp-image-38931\" src=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/03\/a-screenshot-of-a-cell-phone-description-automati-1.png\" alt=\"A screenshot of a cell phone Description automatically generated\" srcset=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/03\/a-screenshot-of-a-cell-phone-description-automati-1.png 310w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/03\/a-screenshot-of-a-cell-phone-description-automati-1-270x300.png 270w\" sizes=\"(max-width: 310px) 100vw, 310px\" \/><\/li>\n<li>Locate in the branch list the one you are going to use to build from, typically that should be your master branch, and click the options icon. Select Branch policies.\n<img decoding=\"async\" width=\"395\" height=\"356\" class=\"wp-image-38932\" src=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/03\/a-screenshot-of-a-cell-phone-description-automati-2.png\" alt=\"A screenshot of a cell phone Description automatically generated\" srcset=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/03\/a-screenshot-of-a-cell-phone-description-automati-2.png 395w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/03\/a-screenshot-of-a-cell-phone-description-automati-2-300x270.png 300w\" sizes=\"(max-width: 395px) 100vw, 395px\" \/><\/li>\n<li>Check the option \u201dCheck for linked work items\u201d. Click Save changes.\n<img decoding=\"async\" width=\"748\" height=\"514\" class=\"wp-image-38933\" src=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/03\/a-screenshot-of-a-social-media-post-description-a-3.png\" alt=\"A screenshot of a social media post Description automatically generated\" srcset=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/03\/a-screenshot-of-a-social-media-post-description-a-3.png 748w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/03\/a-screenshot-of-a-social-media-post-description-a-3-300x206.png 300w\" sizes=\"(max-width: 748px) 100vw, 748px\" \/><\/li>\n<\/ol>\n<p>The next step is to enable the build definition to create links to all work items linked to associated changes when a build completes successfully.<\/p>\n<ol>\n<li>Select your build pipeline definition and click Edit on the top right corner of the page. <img decoding=\"async\" width=\"312\" height=\"121\" class=\"wp-image-38934\" src=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/03\/a-picture-containing-screenshot-description-autom.png\" alt=\"A picture containing screenshot Description automatically generated\" srcset=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/03\/a-picture-containing-screenshot-description-autom.png 312w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/03\/a-picture-containing-screenshot-description-autom-300x116.png 300w\" sizes=\"(max-width: 312px) 100vw, 312px\" \/><\/li>\n<li>In the Options Tab, enable the option \u201cAutomatically link new work in this build\u201d. Click Save. <img decoding=\"async\" width=\"626\" height=\"93\" class=\"wp-image-38935\" src=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/03\/a-picture-containing-knife-description-automatica.png\" alt=\"A picture containing knife Description automatically generated\" srcset=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/03\/a-picture-containing-knife-description-automatica.png 626w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/03\/a-picture-containing-knife-description-automatica-300x45.png 300w\" sizes=\"(max-width: 626px) 100vw, 626px\" \/><\/li>\n<\/ol>\n<p>The last step is to configure the release pipeline to link those work items to the release when a stage is completed.<\/p>\n<p>1 \u2013 Select your release pipeline definition and click Edit on the top right corner of the page. <img decoding=\"async\" width=\"358\" height=\"120\" class=\"wp-image-38936\" src=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/03\/a-screenshot-of-a-cell-phone-description-automati-3.png\" alt=\"A screenshot of a cell phone Description automatically generated\" srcset=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/03\/a-screenshot-of-a-cell-phone-description-automati-3.png 358w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/03\/a-screenshot-of-a-cell-phone-description-automati-3-300x101.png 300w\" sizes=\"(max-width: 358px) 100vw, 358px\" \/><\/p>\n<p>2 \u2013 In the Options Tab, select the Integrations Section and enable the option \u201cReport deployment status to Work Stages. You have the flexibility to choose which environments to associate. <img decoding=\"async\" width=\"1211\" height=\"385\" class=\"wp-image-38937\" src=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/03\/a-screenshot-of-a-cell-phone-description-automati-4.png\" alt=\"A screenshot of a cell phone Description automatically generated\" srcset=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/03\/a-screenshot-of-a-cell-phone-description-automati-4.png 1211w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/03\/a-screenshot-of-a-cell-phone-description-automati-4-300x95.png 300w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/03\/a-screenshot-of-a-cell-phone-description-automati-4-1024x326.png 1024w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/03\/a-screenshot-of-a-cell-phone-description-automati-4-768x244.png 768w\" sizes=\"(max-width: 1211px) 100vw, 1211px\" \/><\/p>\n<p>To test this process, create a branch, make changes to a file, commit those changes, create a pull request, merge it, build and then deploy it using your release pipeline. If the associations are being created and the work items are being linked properly, you should be able to see that information in the Details tab under the Deployment section on the Work item page, as shown in the image below:<\/p>\n<p><img decoding=\"async\" width=\"386\" height=\"590\" class=\"wp-image-38938\" src=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/03\/a-screenshot-of-a-cell-phone-description-automati-5.png\" alt=\"A screenshot of a cell phone Description automatically generated\" srcset=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/03\/a-screenshot-of-a-cell-phone-description-automati-5.png 386w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/03\/a-screenshot-of-a-cell-phone-description-automati-5-196x300.png 196w\" sizes=\"(max-width: 386px) 100vw, 386px\" \/><\/p>\n<p>Also, you can view all work items that were associated to a given release by going to the Summary page of a release run. It should look like this:<\/p>\n<p><img decoding=\"async\" width=\"666\" height=\"302\" class=\"wp-image-38939\" src=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/03\/a-screenshot-of-a-cell-phone-description-automati.jpeg\" alt=\"A screenshot of a cell phone Description automatically generated\" srcset=\"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/03\/a-screenshot-of-a-cell-phone-description-automati.jpeg 666w, https:\/\/devblogs.microsoft.com\/premier-developer\/wp-content\/uploads\/sites\/31\/2020\/03\/a-screenshot-of-a-cell-phone-description-automati-300x136.jpeg 300w\" sizes=\"(max-width: 666px) 100vw, 666px\" \/><\/p>\n<p>Let\u2019s say, for example, that we need to list all work items associated to code changes that got deployed to production in the past 3 months. Since none of those pages will give you that type of visualization because they display one release run at a time, you will need to retrieve that data programmatically from Azure DevOps. Let\u2019s evaluate some options:<\/p>\n<p><strong>Queries<\/strong><\/p>\n<p>Although you can use some work item links types as part of your query parameters, by design it is not possible to query by commits, builds or releases. The reason is those links are treated internally in the tool as a relation object instead of the conventional link objects such as Parent and Child link types.<\/p>\n<p><strong>Azure DevOps Analytics<\/strong><\/p>\n<p>Currently, the v3.0-preview of the OData Endpoint doesn\u2019t expose all the release pipeline information we need for this report. However, it is expected that eventually this will be incorporated as part of the data model. For more information, refer the article on <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/report\/extend-analytics\/quick-ref?view=azure-devops\">Extending Analytics with OData (Preview)<\/a><\/p>\n<p><strong>Rest API<\/strong><\/p>\n<p>The solution is to use the Azure DevOps REST API but there are many ways to invoke it depending on your client application type and authentication method. The link <a href=\"https:\/\/nam06.safelinks.protection.outlook.com\/?url=https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Frest%2Fapi%2Fazure%2Fdevops%2F%3Fview%3Dazure-devops-rest-5.1&amp;data=02%7C01%7Cmahendma%40microsoft.com%7C51ae31cc2ca9489cc71c08d7bbacf3d5%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637184223837269924&amp;sdata=jrpgNn%2BOCDvzZu3zP1JJYsnkyrYpsyel3vD8AR01coY%3D&amp;reserved=0\">Azure DevOps Services REST API Reference<\/a> has some useful information to help you decide which client technology to use.<\/p>\n<h2>Writing the client application to call the API<\/h2>\n<p>For this article, we will build a console application in C# to call the Azure DevOps Rest API using the Client API library. This will greatly simplify our code and avoid long and extensive json parsing and manipulation when compared to using the HttpClient object. You can still make direct calls if you prefer, though.<\/p>\n<p>Here is the code:<\/p>\n<pre class=\"lang:c# decode:true \">\/\/ Copyright \u00a9 Microsoft Corporation.  All Rights Reserved.\r\n\/\/ This code released under the terms of the \r\n\/\/ Microsoft Public License (MS-PL, http:\/\/opensource.org\/licenses\/ms-pl.html.)\r\n\r\nusing System;\r\nusing System.Linq;\r\nusing Microsoft.TeamFoundation.Build.WebApi;\r\nusing Microsoft.TeamFoundation.WorkItemTracking.WebApi;\r\nusing Microsoft.VisualStudio.Services.Common;\r\nusing Microsoft.VisualStudio.Services.ReleaseManagement.WebApi.Clients;\r\nusing Microsoft.VisualStudio.Services.WebApi;\r\n\r\nnamespace GetRelatedWorkItemsAppPoc\r\n{\r\n    class Program\r\n    {\r\n        internal const string azureDevOpsOrganizationUrl = \"https:\/\/dev.azure.com\/{yourorganization}\/\";\r\n        internal const string pat = \"{yourtoken}\";\r\n        internal const string projectName = \"{yourprojectname}\";\r\n\r\n        static void Main(string[] args)\r\n        {\r\n            var connection = new VssConnection(new Uri(azureDevOpsOrganizationUrl), new VssBasicCredential(string.Empty, pat));\r\n\r\n            var startDate = new DateTime(2019, 9, 5, 18, 0, 0, DateTimeKind.Utc);\r\n            var endDate = new DateTime(2019, 12, 5, 23, 30, 0, DateTimeKind.Utc);\r\n\r\n            var releaseClient = connection.GetClient&lt;ReleaseHttpClient&gt;();\r\n            var buildClient = connection.GetClient&lt;BuildHttpClient&gt;();\r\n            var wiclient = connection.GetClient&lt;WorkItemTrackingHttpClient&gt;();\r\n                              \r\n            var releaseList = releaseClient.GetReleasesAsync(project: projectName, minCreatedTime: startDate, maxCreatedTime: endDate).Result;\r\n            \r\n            \r\n            Console.WriteLine($\"Organization: {azureDevOpsOrganizationUrl}\");\r\n            Console.WriteLine($\"Project Name: {projectName} \\n\");\r\n            Console.WriteLine($\"Searching for Deployments from {startDate} to {endDate} UTC\\n\");\r\n\r\n            if (releaseList.Count &gt; 0)\r\n            {\r\n                foreach (var releaseItem in releaseList)\r\n                {\r\n                    var release = releaseClient.GetReleaseAsync(project: projectName, releaseId: releaseItem.Id).Result;\r\n\r\n                    Console.WriteLine($\"Deployment Report for {release.Name}\");\r\n                    var deploymentArtifact = release.Artifacts.FirstOrDefault();\r\n\r\n                    if (deploymentArtifact != null)\r\n                    {\r\n                        var buildRunId = Convert.ToInt32(deploymentArtifact.DefinitionReference[\"version\"].Id);\r\n                        var buildVersion = deploymentArtifact.DefinitionReference[\"version\"].Name;\r\n\r\n                        var workItemList = buildClient.GetBuildWorkItemsRefsAsync(project: projectName, buildRunId).Result;\r\n                        Console.WriteLine($\"{String.Empty.PadLeft(5)} List of workitems associated to Build {buildVersion} \");\r\n\r\n                        foreach (var workitem in workItemList)\r\n                        {\r\n                            var wi = wiclient.GetWorkItemAsync(id: Convert.ToInt32(workitem.Id), expand: Microsoft.TeamFoundation.WorkItemTracking.WebApi.Models.WorkItemExpand.Relations).Result;\r\n                            Console.WriteLine($\"{String.Empty.PadLeft(10)} {wi.Id} - {wi.Fields[\"System.Title\"]} \");\r\n                        }\r\n                    }\r\n                    else\r\n                    {\r\n                        Console.WriteLine(\"Unable to Locate Artifact for this deployment\");\r\n                    }\r\n                    Console.WriteLine(\" \");\r\n                }\r\n            }\r\n            else\r\n            {\r\n                Console.WriteLine(\"No Deployments found for this period.\");\r\n            }\r\n        }\r\n              \r\n    }\r\n}\r\n<\/pre>\n<p>For this sample to work, replace the variable strings with your organization URL, PAT token and project name.<\/p>\n<p>The first thing the program does after the authentication steps is to list all releases that occurred in the past 3 months.<\/p>\n<p>According to the API, the associated work items are not linked directly to a release run. Instead, they are linked through the build that generated the artifact that was used as source for the release pipeline. Therefore, the application had to load the artifact data to identify the build run and then get a list of all work items associated to that build. You could go one level further and even query all the commits associated with the work items to get to the file names.<\/p>\n<h2>Conclusion<\/h2>\n<p>I hope you got inspired to explore new ways to interact with Azure DevOps and experience how easy and straightforward it is to pull information from the Azure DevOps using REST API.<\/p>\n<h2>References<\/h2>\n<ul>\n<li>Azure DevOps Reporting documentation \u00a0&#8211; <a href=\"https:\/\/nam06.safelinks.protection.outlook.com\/?url=https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fdevops%2Freport%2F%3Fview%3Dazure-devops&amp;data=02%7C01%7Cmahendma%40microsoft.com%7C51ae31cc2ca9489cc71c08d7bbacf3d5%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637184223837239942&amp;sdata=lU6jQxTqf3PsCmUp4SeDNL%2BifiykuOBslaSsp5H9dd0%3D&amp;reserved=0\">https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/report\/?view=azure-devops<\/a><\/li>\n<li>Data available from Analytics \u00a0&#8211; <a href=\"https:\/\/nam06.safelinks.protection.outlook.com\/?url=https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fdevops%2Freport%2Fpowerbi%2Fdata-available-in-analytics%3Fview%3Dazure-devops&amp;data=02%7C01%7Cmahendma%40microsoft.com%7C51ae31cc2ca9489cc71c08d7bbacf3d5%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637184223837249932&amp;sdata=IZ%2F7Zqo0OTSUeGD3Z24nr%2Bn39lI3xHc2wFYH%2BgWoy%2Bs%3D&amp;reserved=0\">https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/report\/powerbi\/data-available-in-analytics?view=azure-devops<\/a><\/li>\n<li>Data model for Analytics \u00a0&#8211; <a href=\"https:\/\/nam06.safelinks.protection.outlook.com\/?url=https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fdevops%2Freport%2Fextend-analytics%2Fdata-model-analytics-service%3Fview%3Dazure-devops&amp;data=02%7C01%7Cmahendma%40microsoft.com%7C51ae31cc2ca9489cc71c08d7bbacf3d5%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637184223837249932&amp;sdata=um0bkKoaTHV3gVSsgmH3qdrHgfVLp3OqW%2FXwGB3rfKQ%3D&amp;reserved=0\">https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/report\/extend-analytics\/data-model-analytics-service?view=azure-devops<\/a><\/li>\n<li>Extend Analytics with OData (Preview) quick reference \u00a0&#8211; <a href=\"https:\/\/nam06.safelinks.protection.outlook.com\/?url=https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fazure%2Fdevops%2Freport%2Fextend-analytics%2Fquick-ref%3Fview%3Dazure-devops&amp;data=02%7C01%7Cmahendma%40microsoft.com%7C51ae31cc2ca9489cc71c08d7bbacf3d5%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C637184223837259932&amp;sdata=RRJwV99T4F4wV1a4jd1ulb62%2BLZjLhVEiTA3fHw6mNE%3D&amp;reserved=0\">https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/report\/extend-analytics\/quick-ref?view=azure-devops<\/a><\/li>\n<li>Linking, traceability, and managing dependencies &#8211; <a href=\"https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/boards\/queries\/link-work-items-support-traceability?view=azure-devops&amp;tabs=new-web-form\">https:\/\/docs.microsoft.com\/en-us\/azure\/devops\/boards\/queries\/link-work-items-support-traceability?view=azure-devops&amp;tabs=new-web-form<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>In this article we are going to learn how to retrieve all work items associated with a release pipeline using the Azure DevOps API.<\/p>\n","protected":false},"author":582,"featured_media":38940,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[22],"tags":[2571,21,3],"class_list":["post-38930","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-devops","tag-azure-devops","tag-devops","tag-team"],"acf":[],"blog_post_summary":"<p>In this article we are going to learn how to retrieve all work items associated with a release pipeline using the Azure DevOps API.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/posts\/38930","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/users\/582"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/comments?post=38930"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/posts\/38930\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/media\/38940"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/media?parent=38930"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/categories?post=38930"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/premier-developer\/wp-json\/wp\/v2\/tags?post=38930"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}