{"id":33703,"date":"2026-04-29T05:00:00","date_gmt":"2026-04-29T03:00:00","guid":{"rendered":"https:\/\/sii.pl\/blog\/?p=33703"},"modified":"2026-04-28T15:37:50","modified_gmt":"2026-04-28T13:37:50","slug":"how-to-set-up-branch-policies-in-azure-devops-complete-guide-for-pr-validation","status":"publish","type":"post","link":"https:\/\/sii.pl\/blog\/en\/how-to-set-up-branch-policies-in-azure-devops-complete-guide-for-pr-validation\/","title":{"rendered":"How to set up branch policies in Azure DevOps: Complete guide for PR validation"},"content":{"rendered":"\n<p>If you are working with Git, you are probably using Git flow or any other type of workflow that assumes the main branch code is production-ready. It means that any pull request targeting this branch should be validated and tested. This is where Azure DevOps Branch policies shine.<\/p>\n\n\n\n<p>In this article, we will go over settings that will help us maintain high code quality, speed up PR review, and minimize post-deployment problems.<\/p>\n\n\n\n<p>This comprehensive guide covers:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Understanding cross-repository vs. single-repository branch policies.<\/li>\n\n\n\n<li>Configuring minimum reviewer requirements and code quality checks.<\/li>\n\n\n\n<li>Setting up build validation.<\/li>\n\n\n\n<li>Implementing security checks and status validations.<\/li>\n\n\n\n<li>Best practices for different team sizes.<\/li>\n\n\n\n<li>Quick-start configurations for immediate implementation.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong><strong>Cross-Repository vs. Single-Repository branch policies<\/strong><\/strong><\/h2>\n\n\n\n<p>Let&#8217;s start with a quick explanation of these two types.<\/p>\n\n\n\n<p><strong>Cross-repository policies<\/strong> will be applied to all repositories inside a project, as the name suggests. You can apply them to the default branch (main\/master) or any other branch that matches a specified pattern. This is really handy for settings like minimum number of reviewers or security checks (more on that later).<\/p>\n\n\n\n<p>You can find these policies under <strong>Settings &gt; Repositories &gt; Policies &gt; [default branch]<\/strong><\/p>\n\n\n\n<figure data-wp-context=\"{&quot;uploadedSrc&quot;:&quot;https:\\\/\\\/sii.pl\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/1.cross-repo-policies.png&quot;,&quot;figureClassNames&quot;:&quot;wp-block-image aligncenter size-large&quot;,&quot;figureStyles&quot;:null,&quot;imgClassNames&quot;:&quot;wp-image-33681&quot;,&quot;imgStyles&quot;:null,&quot;targetWidth&quot;:1166,&quot;targetHeight&quot;:858,&quot;scaleAttr&quot;:false,&quot;ariaLabel&quot;:&quot;Enlarge image: All Repositories&quot;,&quot;alt&quot;:&quot;All Repositories&quot;}\" data-wp-interactive=\"core\/image\" class=\"wp-block-image aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" width=\"1024\" height=\"754\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/1.cross-repo-policies-1024x754.png\" alt=\"All Repositories\" class=\"wp-image-33681\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/1.cross-repo-policies-1024x754.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/1.cross-repo-policies-300x221.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/1.cross-repo-policies-768x565.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/1.cross-repo-policies.png 1166w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge image: All Repositories\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on-async--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"context.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"context.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Fig. 1 All Repositories<\/figcaption><\/figure>\n\n\n\n<p><strong>Single-repository policies<\/strong> are applied to a specific repository only. You can find these policies by navigating to <strong>Settings &gt; Repositories &gt; [your repository] &gt; Policies &gt; [your branch name]<\/strong><\/p>\n\n\n\n<p><strong>Important<\/strong>: Single-repository policies are additive to cross-repository policies. If you set up a cross-repository policy, it will be applied on the repository level, but you can add more restrictive policies if needed.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;uploadedSrc&quot;:&quot;https:\\\/\\\/sii.pl\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/2.single-repo-policies.png&quot;,&quot;figureClassNames&quot;:&quot;wp-block-image aligncenter size-large&quot;,&quot;figureStyles&quot;:null,&quot;imgClassNames&quot;:&quot;wp-image-33683&quot;,&quot;imgStyles&quot;:null,&quot;targetWidth&quot;:1353,&quot;targetHeight&quot;:861,&quot;scaleAttr&quot;:false,&quot;ariaLabel&quot;:&quot;Enlarge image: Branch Policies&quot;,&quot;alt&quot;:&quot;Branch Policies&quot;}\" data-wp-interactive=\"core\/image\" class=\"wp-block-image aligncenter size-large wp-lightbox-container\"><img decoding=\"async\" width=\"1024\" height=\"652\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/2.single-repo-policies-1024x652.png\" alt=\"Branch Policies\" class=\"wp-image-33683\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/2.single-repo-policies-1024x652.png 1024w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/2.single-repo-policies-300x191.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/2.single-repo-policies-768x489.png 768w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/2.single-repo-policies.png 1353w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge image: Branch Policies\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on-async--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"context.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"context.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Fig. 2 Branch Policies<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong><strong>Branch policies overview<\/strong><\/strong><\/h2>\n\n\n\n<p>Azure DevOps offers several types of branch policies. Let&#8217;s explore the most commonly used ones.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><strong>Require a minimum number of reviewers<\/strong><\/strong><\/h3>\n\n\n\n<p>You should always have someone check your code. Not only does it lead to improved security and better code quality in PR, but feedback also helps you develop your skills as a software engineer over time. <\/p>\n\n\n\n<p>That&#8217;s why we are always aiming for at least 1 reviewer who is not an author or a co-author of the PR (top 2 checkboxes).<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;uploadedSrc&quot;:&quot;https:\\\/\\\/sii.pl\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/3.require-minimum.png&quot;,&quot;figureClassNames&quot;:&quot;wp-block-image aligncenter size-full&quot;,&quot;figureStyles&quot;:null,&quot;imgClassNames&quot;:&quot;wp-image-33685&quot;,&quot;imgStyles&quot;:null,&quot;targetWidth&quot;:662,&quot;targetHeight&quot;:454,&quot;scaleAttr&quot;:false,&quot;ariaLabel&quot;:&quot;Enlarge image: Number of reviewers&quot;,&quot;alt&quot;:&quot;Number of reviewers&quot;}\" data-wp-interactive=\"core\/image\" class=\"wp-block-image aligncenter size-full wp-lightbox-container\"><img decoding=\"async\" width=\"662\" height=\"454\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/3.require-minimum.png\" alt=\"Number of reviewers\" class=\"wp-image-33685\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/3.require-minimum.png 662w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/3.require-minimum-300x206.png 300w\" sizes=\"(max-width: 662px) 100vw, 662px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge image: Number of reviewers\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on-async--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"context.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"context.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Fig. 3 Number of reviewers<\/figcaption><\/figure>\n\n\n\n<p>If new changes are pushed, all approval votes should be reset. It ensures that no accidental changes are approved in the main branch.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><strong>Check for comment resolution<\/strong><\/strong><\/h3>\n\n\n\n<p>This policy ensures that all comments in a pull request are resolved before merging.<\/p>\n\n\n\n<p><strong>Why it matters<\/strong>: It prevents incomplete discussions from being merged into main and helps maintain code clarity. If a reviewer asks a question or suggests an improvement, the policy ensures it&#8217;s addressed before the PR is completed.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;uploadedSrc&quot;:&quot;https:\\\/\\\/sii.pl\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/4.comment-resolution.png&quot;,&quot;figureClassNames&quot;:&quot;wp-block-image aligncenter size-full&quot;,&quot;figureStyles&quot;:null,&quot;imgClassNames&quot;:&quot;wp-image-33687&quot;,&quot;imgStyles&quot;:null,&quot;targetWidth&quot;:611,&quot;targetHeight&quot;:204,&quot;scaleAttr&quot;:false,&quot;ariaLabel&quot;:&quot;Enlarge image: Check for comment resolution&quot;,&quot;alt&quot;:&quot;Check for comment resolution&quot;}\" data-wp-interactive=\"core\/image\" class=\"wp-block-image aligncenter size-full wp-lightbox-container\"><img decoding=\"async\" width=\"611\" height=\"204\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/4.comment-resolution.png\" alt=\"Check for comment resolution\" class=\"wp-image-33687\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/4.comment-resolution.png 611w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/4.comment-resolution-300x100.png 300w\" sizes=\"(max-width: 611px) 100vw, 611px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge image: Check for comment resolution\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on-async--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"context.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"context.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Fig. 4 Check for comment resolution<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><strong>Limit merge types<\/strong><\/strong><\/h3>\n\n\n\n<p>Merge types are not necessarily something that you want to limit. It depends on your GIT workflow and preferences.<\/p>\n\n\n\n<p>However, in most cases, I find &#8220;Squash merge&#8221; a good option. It gets rid of all junk commits like &#8220;fix typo in variable,&#8221; helping keep the main branch history clean and readable.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;uploadedSrc&quot;:&quot;https:\\\/\\\/sii.pl\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/5.merge-types.png&quot;,&quot;figureClassNames&quot;:&quot;wp-block-image aligncenter size-full&quot;,&quot;figureStyles&quot;:null,&quot;imgClassNames&quot;:&quot;wp-image-33689&quot;,&quot;imgStyles&quot;:null,&quot;targetWidth&quot;:965,&quot;targetHeight&quot;:283,&quot;scaleAttr&quot;:false,&quot;ariaLabel&quot;:&quot;Enlarge image: Limit merge types&quot;,&quot;alt&quot;:&quot;Limit merge types&quot;}\" data-wp-interactive=\"core\/image\" class=\"wp-block-image aligncenter size-full wp-lightbox-container\"><img decoding=\"async\" width=\"965\" height=\"283\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/5.merge-types.png\" alt=\"Limit merge types\" class=\"wp-image-33689\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/5.merge-types.png 965w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/5.merge-types-300x88.png 300w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/5.merge-types-768x225.png 768w\" sizes=\"(max-width: 965px) 100vw, 965px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge image: Limit merge types\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on-async--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"context.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"context.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Fig. 5 Limit merge types<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><strong>Check for linked work items<\/strong><\/strong><\/h3>\n\n\n\n<p>This policy requires pull requests to have linked work items, improving traceability and project management.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;uploadedSrc&quot;:&quot;https:\\\/\\\/sii.pl\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/6.linked-work-items.png&quot;,&quot;figureClassNames&quot;:&quot;wp-block-image aligncenter size-full&quot;,&quot;figureStyles&quot;:null,&quot;imgClassNames&quot;:&quot;wp-image-33691&quot;,&quot;imgStyles&quot;:null,&quot;targetWidth&quot;:621,&quot;targetHeight&quot;:241,&quot;scaleAttr&quot;:false,&quot;ariaLabel&quot;:&quot;Enlarge image: Check for linked work items&quot;,&quot;alt&quot;:&quot;Check for linked work items&quot;}\" data-wp-interactive=\"core\/image\" class=\"wp-block-image aligncenter size-full wp-lightbox-container\"><img decoding=\"async\" width=\"621\" height=\"241\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/6.linked-work-items.png\" alt=\"Check for linked work items\" class=\"wp-image-33691\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/6.linked-work-items.png 621w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/6.linked-work-items-300x116.png 300w\" sizes=\"(max-width: 621px) 100vw, 621px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge image: Check for linked work items\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on-async--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"context.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"context.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Fig. 6 Check for linked work items<\/figcaption><\/figure>\n\n\n\n<p><strong>Why it matters<\/strong>: Every code change should correspond to a business requirement, user story, or bug. This policy ensures:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Complete audit trail of what changed and why.<\/li>\n\n\n\n<li>Better tracking for compliance and governance.<\/li>\n\n\n\n<li>Improved sprint planning and retrospectives.<\/li>\n\n\n\n<li>Easier identification of related changes across the codebase.<\/li>\n<\/ul>\n\n\n\n<p>Developers simply link work items when creating or updating the PR. It can be done in the PR UI or by simply typing #ID into the PR description or commit messages.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong><strong>Build validation<\/strong><\/strong><\/h2>\n\n\n\n<p>Build validation ensures that code builds successfully and passes tests before merging. This is one of the most important policies for maintaining code quality.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><strong>Understanding build pipeline stages<\/strong><\/strong><\/h3>\n\n\n\n<p>Your CI\/CD pipeline typically consists of multiple stages:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Build Stage: Compiles code and creates artifacts.<\/li>\n\n\n\n<li>Test Stage: Runs unit tests, integration tests, and code coverage analysis.<\/li>\n\n\n\n<li>Deploy Stage: Deploys to test\/staging environments for additional validation.<\/li>\n<\/ul>\n\n\n\n<p><strong>Build stage<\/strong> should always run using Release\/Publish configurations. That speeds up the review process by showing us compilation errors immediately.<\/p>\n\n\n\n<p><strong>Test stage<\/strong> should always finish with 100% success rate. This ensures that the PR doesn&#8217;t introduce new bugs or break existing functionality.<\/p>\n\n\n\n<p><strong>Deploy stage<\/strong> is often skipped in PR validation but is really helpful for QA to have live preview for changes. Also, it&#8217;s necessary to validate deployments when using <strong>an infrastructure-as-code (IaC) approach (ARM templates, Terraform, Bicep files,<\/strong> etc.). Then it&#8217;s crucial to check every time you make changes in the repository.<br><\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><strong>Configuring Build Validation<\/strong><\/strong><\/h3>\n\n\n\n<p>To set up Build Validation, simply select your pipeline. The result should expire every time the protected branch is changed. It should also automatically run again whenever new changes are pushed to a PR. This ensures all checks are up to date.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;uploadedSrc&quot;:&quot;https:\\\/\\\/sii.pl\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/7.build-validation.png&quot;,&quot;figureClassNames&quot;:&quot;wp-block-image aligncenter size-full&quot;,&quot;figureStyles&quot;:null,&quot;imgClassNames&quot;:&quot;wp-image-33693&quot;,&quot;imgStyles&quot;:null,&quot;targetWidth&quot;:468,&quot;targetHeight&quot;:876,&quot;scaleAttr&quot;:false,&quot;ariaLabel&quot;:&quot;Enlarge image: Add build policy&quot;,&quot;alt&quot;:&quot;Add build policy&quot;}\" data-wp-interactive=\"core\/image\" class=\"wp-block-image aligncenter size-full wp-lightbox-container\"><img decoding=\"async\" width=\"468\" height=\"876\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/7.build-validation.png\" alt=\"Add build policy\" class=\"wp-image-33693\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/7.build-validation.png 468w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/7.build-validation-160x300.png 160w\" sizes=\"(max-width: 468px) 100vw, 468px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge image: Add build policy\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on-async--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"context.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"context.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Fig. 7 Add build policy<\/figcaption><\/figure>\n\n\n\n<p><strong>Recommendation:<\/strong> You can use the same pipeline for manual deployments and PR-triggered ones. If you need to alter the behavior slightly, you can use a simple condition:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: xml; title: ; notranslate\" title=\"\">\n${{ if eq(variables&#x5B;&#039;Build.Reason&#039;], &#039;PullRequest&#039;) }}\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\"><strong><strong>Status checks<\/strong><\/strong><\/h3>\n\n\n\n<p>Status checks are used to validate the status posted by external services. It is often used for:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>custom code quality gates,<\/li>\n\n\n\n<li>security scanning services,<\/li>\n\n\n\n<li>integration tests from external systems.<\/li>\n<\/ul>\n\n\n\n<p>They are often triggered from the pipeline, but the results are published separately. They help you maintain high-quality code and speed up the review process.<\/p>\n\n\n\n<p><strong>Configuration<\/strong>: Link to external status check endpoints that report pass\/fail status for your PR.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;uploadedSrc&quot;:&quot;https:\\\/\\\/sii.pl\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/8.status-check.png&quot;,&quot;figureClassNames&quot;:&quot;wp-block-image aligncenter size-full&quot;,&quot;figureStyles&quot;:null,&quot;imgClassNames&quot;:&quot;wp-image-33695&quot;,&quot;imgStyles&quot;:null,&quot;targetWidth&quot;:580,&quot;targetHeight&quot;:943,&quot;scaleAttr&quot;:false,&quot;ariaLabel&quot;:&quot;Enlarge image: Edit status policy&quot;,&quot;alt&quot;:&quot;Edit status policy&quot;}\" data-wp-interactive=\"core\/image\" class=\"wp-block-image aligncenter size-full wp-lightbox-container\"><img decoding=\"async\" width=\"580\" height=\"943\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/8.status-check.png\" alt=\"Edit status policy\" class=\"wp-image-33695\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/8.status-check.png 580w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/8.status-check-185x300.png 185w\" sizes=\"(max-width: 580px) 100vw, 580px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge image: Edit status policy\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on-async--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"context.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"context.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Fig. 8 Edit status policy<\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\"><strong><strong>Security best practice: Secret exposure detection<\/strong><\/strong><\/h3>\n\n\n\n<p>For smaller projects, I recommend at least using secret leak detection tools like <a href=\"https:\/\/github.com\/JoostVoskuil\/azure-devops-gitleaks\" rel=\"nofollow\" >Gi<\/a><a href=\"https:\/\/github.com\/JoostVoskuil\/azure-devops-gitleaks\" target=\"_blank\" rel=\"noopener\" title=\"\" rel=\"nofollow\" >t<\/a><a href=\"https:\/\/github.com\/JoostVoskuil\/azure-devops-gitleaks\" rel=\"nofollow\" >leaks<\/a>. It can be set up quickly in a build pipeline or a dedicated security pipeline. That small step will help us quickly catch accidental exposure of passwords or API keys.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong><strong>Automatically included reviewers<\/strong><\/strong><\/h2>\n\n\n\n<p>This setting is one of the developers&#8217; favorites. You can automatically add reviewers to your PR, so everyone gets a notification when you create one. You can specify specific people, or take it a step further and add an Azure DevOps team as a reviewer.<\/p>\n\n\n\n<p>You can include all developers in your team or set up a dedicated review\/QA team that will be included as required reviewers across all repositories. All of them will receive a notification, but only 1 needs to approve the PR to complete this policy.<\/p>\n\n\n\n<figure data-wp-context=\"{&quot;uploadedSrc&quot;:&quot;https:\\\/\\\/sii.pl\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/9.automatic-reviewers.png&quot;,&quot;figureClassNames&quot;:&quot;wp-block-image aligncenter size-full&quot;,&quot;figureStyles&quot;:null,&quot;imgClassNames&quot;:&quot;wp-image-33697&quot;,&quot;imgStyles&quot;:null,&quot;targetWidth&quot;:477,&quot;targetHeight&quot;:891,&quot;scaleAttr&quot;:false,&quot;ariaLabel&quot;:&quot;Enlarge image: Edit reviewer policy&quot;,&quot;alt&quot;:&quot;Edit reviewer policy&quot;}\" data-wp-interactive=\"core\/image\" class=\"wp-block-image aligncenter size-full wp-lightbox-container\"><img decoding=\"async\" width=\"477\" height=\"891\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on-async--click=\"actions.showLightbox\" data-wp-on-async--load=\"callbacks.setButtonStyles\" data-wp-on-async-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/9.automatic-reviewers.png\" alt=\"Edit reviewer policy\" class=\"wp-image-33697\" srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/9.automatic-reviewers.png 477w, https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/9.automatic-reviewers-161x300.png 161w\" sizes=\"(max-width: 477px) 100vw, 477px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Enlarge image: Edit reviewer policy\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on-async--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"context.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"context.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Fig. 9 Edit reviewer policy<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong><strong>Quick start recommendations<\/strong><\/strong><\/h2>\n\n\n\n<p>Based on team size and project complexity, you can use the following branch policy configurations:<\/p>\n\n\n\n<p><strong>For small projects<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Require a minimum of 1 reviewer (not author\/co-author).<\/li>\n\n\n\n<li>Check for comment resolution.<\/li>\n\n\n\n<li>Build validation (Build + Test stages).<\/li>\n\n\n\n<li>Check Secrets exposure.<\/li>\n\n\n\n<li>Check for linked work items (optional; use if adopting Agile\/Scrum).<\/li>\n<\/ul>\n\n\n\n<p><strong>Rationale<\/strong>: Keep it lean while ensuring code quality and peer review.<\/p>\n\n\n\n<p><strong>For enterprise projects<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Require a minimum of 2-3 reviewers (including architect\/tech lead review).<\/li>\n\n\n\n<li>Check for comment resolution.<\/li>\n\n\n\n<li>Build validation (Build + Test + Deploy stages).<\/li>\n\n\n\n<li>Check for linked work items.<\/li>\n\n\n\n<li>Limit merge types to squash merge.<\/li>\n\n\n\n<li>Status checks (security scanning, code quality gates).<\/li>\n\n\n\n<li>Use cross-repository policies for consistency in organization.<\/li>\n<\/ul>\n\n\n\n<p><strong>Rationale<\/strong>: Stricter controls ensure quality, security, and compliance across large codebases and teams.<\/p>\n\n\n<div class=\"nsw-o-blogersii-banner\">\n            <picture>\n            <source srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/Blog-Microsoft-Desktop.jpg\" media=\"(min-width: 992px)\" >\n            <source srcset=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/Blog-Microsoft-Mob_.jpg\" media=\"(min-width: 300px)\" >            <img decoding=\"async\" src=\"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/Blog-Microsoft-Desktop.jpg\" alt=\"\"  class=\"\"  >\n        <\/picture>\n        <div class=\"cnt\">\n                    <div class=\"nsw-m-title-block -h3 -invert  -has-title-margin-bottom-0 -has-title-font-weight-bold\">\n                                <h2 class=\"nsw-m-title-block__title\">Sii x Microsoft<\/h2>\n                <\/div>\n                            <p class=\"has-nsw-p-4-font-size has-invert-color\">\n                As a Microsoft Cloud partner, we offer a range of solutions that optimize processes, improve collaboration and enable businesses to achieve agility augmented with AI.\n            <\/p>\n                            <a  href=\"https:\/\/sii.pl\/en\/what-we-offer\/enterprise-platforms\/microsoft\/\" class=\"nsw-a-button -ghost -banner-button\"   >\n        <span>Check our offer<\/span>\n    <\/a>\n            <\/div>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\"><strong><strong>Best practices summary<\/strong><\/strong><\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>Start conservative<\/strong>: Begin with essential policies (reviewers + build validation) and add more as you go<\/li>\n\n\n\n<li><strong>Document your policies<\/strong>: Communicate to the team why each policy exists<\/li>\n\n\n\n<li><strong>Review regularly<\/strong>: Periodically assess whether policies are too strict or too lenient<\/li>\n\n\n\n<li><strong>Automate what you can<\/strong>: Use status checks for security scanning and code quality tools<\/li>\n\n\n\n<li><strong>Allow exceptions<\/strong>: Some users may need permission to bypass policies for emergency hotfixes<\/li>\n\n\n\n<li><strong>Gradual enforcement<\/strong>: Start policies as &#8220;optional&#8221; warnings before making them &#8220;required.&#8221;<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\"><strong><strong>Conclusion<\/strong><\/strong><\/h2>\n\n\n\n<p>Branch policies can make our lives easier. They help us maintain high code quality and reduce deployment issues in Azure DevOps. By understanding the different types of policies and configuring them appropriately for your team size and project needs, you can significantly improve your development workflow.<\/p>\n\n\n\n<p>The key is finding the right balance: strict enough to catch problems early, but not so strict that developers bypass policies or become frustrated.<\/p>\n\n\n\n<p>For more information, <a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/devops\/repos\/git\/branch-policies-overview?view=azure-devops\" target=\"_blank\" rel=\"noopener\" title=\"\" rel=\"nofollow\" >refer to the documentation<\/a>.<\/p>\n\n\n<div class=\"kk-star-ratings kksr-auto kksr-align-left kksr-valign-bottom\"\n    data-payload='{&quot;align&quot;:&quot;left&quot;,&quot;id&quot;:&quot;33703&quot;,&quot;slug&quot;:&quot;default&quot;,&quot;valign&quot;:&quot;bottom&quot;,&quot;ignore&quot;:&quot;&quot;,&quot;reference&quot;:&quot;auto&quot;,&quot;class&quot;:&quot;&quot;,&quot;count&quot;:&quot;1&quot;,&quot;legendonly&quot;:&quot;&quot;,&quot;readonly&quot;:&quot;&quot;,&quot;score&quot;:&quot;5&quot;,&quot;starsonly&quot;:&quot;&quot;,&quot;best&quot;:&quot;5&quot;,&quot;gap&quot;:&quot;2&quot;,&quot;greet&quot;:&quot;&quot;,&quot;legend&quot;:&quot;5\\\/5&quot;,&quot;size&quot;:&quot;30&quot;,&quot;title&quot;:&quot;How to set up branch policies in Azure DevOps: Complete guide for PR validation&quot;,&quot;width&quot;:&quot;159&quot;,&quot;_legend&quot;:&quot;{score}\\\/5&quot;,&quot;font_factor&quot;:&quot;1.25&quot;}'>\n            \n<div class=\"kksr-stars\">\n    \n<div class=\"kksr-stars-inactive\">\n            <div class=\"kksr-star\" data-star=\"1\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"2\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"3\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"4\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" data-star=\"5\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n    \n<div class=\"kksr-stars-active\" style=\"width: 159px;\">\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n            <div class=\"kksr-star\" style=\"padding-right: 2px\">\n            \n\n<div class=\"kksr-icon\" style=\"width: 30px; height: 30px;\"><\/div>\n        <\/div>\n    <\/div>\n<\/div>\n                \n\n<div class=\"kksr-legend\" style=\"font-size: 24px;\">\n            5\/5    <\/div>\n    <\/div>\n","protected":false},"excerpt":{"rendered":"<p>If you are working with Git, you are probably using Git flow or any other type of workflow that assumes &hellip; <a class=\"continued-btn\" href=\"https:\/\/sii.pl\/blog\/en\/how-to-set-up-branch-policies-in-azure-devops-complete-guide-for-pr-validation\/\">Continued<\/a><\/p>\n","protected":false},"author":458,"featured_media":33700,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","inline_featured_image":false,"footnotes":""},"categories":[1320],"tags":[14755,14475,1761,1720,1526],"class_list":["post-33703","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-hard-development","tag-mba-en","tag-azure-devops-en","tag-best-practices","tag-git-en","tag-guidebook"],"acf":[],"aioseo_notices":[],"republish_history":[],"featured_media_url":"https:\/\/sii.pl\/blog\/wp-content\/uploads\/2026\/04\/code_2.jpg","category_names":["Hard development"],"_links":{"self":[{"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/posts\/33703"}],"collection":[{"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/users\/458"}],"replies":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/comments?post=33703"}],"version-history":[{"count":2,"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/posts\/33703\/revisions"}],"predecessor-version":[{"id":33707,"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/posts\/33703\/revisions\/33707"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/media\/33700"}],"wp:attachment":[{"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/media?parent=33703"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/categories?post=33703"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sii.pl\/blog\/en\/wp-json\/wp\/v2\/tags?post=33703"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}