{"id":81766,"date":"2025-06-18T17:58:51","date_gmt":"2025-06-18T12:28:51","guid":{"rendered":"https:\/\/www.guvi.in\/blog\/?p=81766"},"modified":"2025-09-08T10:31:29","modified_gmt":"2025-09-08T05:01:29","slug":"api-versioning-in-spring-boot-guide","status":"publish","type":"post","link":"https:\/\/www.guvi.in\/blog\/api-versioning-in-spring-boot-guide\/","title":{"rendered":"2025 Guide to Master API Versioning in Spring Boot"},"content":{"rendered":"\n<p>As your application grows, your APIs will need to change, maybe to add new features or fix old ones.&nbsp;<\/p>\n\n\n\n<p>But if you update your APIs without any control, you might end up breaking things for users who are still using the older version.<\/p>\n\n\n\n<p>That\u2019s where API<strong> <\/strong>Versioning in Spring Boot comes in. It helps you release changes safely, without affecting existing users. Think of it like giving users a choice; they can keep using the old version or move to the new one when they&#8217;re ready.<\/p>\n\n\n\n<p>In this blog, we\u2019ll explain why API Versioning in Spring Boot is important and how to do it properly.<\/p>\n\n\n\n<p>We\u2019ll go through the most common versioning strategies, show code examples, and help you choose the right one for your project.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Why API Versioning in Spring Boot?<\/strong><\/h2>\n\n\n\n<p>When your app gets bigger, you may need to change how your API works. But changing things without warning can break the apps of people who are using the old version.<\/p>\n\n\n\n<p>By using API Versioning in Spring Boot, you can:<\/p>\n\n\n\n<ul>\n<li><strong>Avoid breaking old apps<\/strong> that still use the older version<\/li>\n\n\n\n<li><strong>Slowly roll out new features<\/strong> without forcing everyone to update<\/li>\n\n\n\n<li><strong>Improve your APIs<\/strong> while keeping the old ones running<\/li>\n\n\n\n<li><strong>Make the upgrade process smoother<\/strong> for your users<\/li>\n<\/ul>\n\n\n\n<p>It\u2019s like giving your users a time machine; they can choose the version that works best for them.<\/p>\n\n\n\n<p>As your app grows, your APIs will evolve too. Without API Versioning in Spring Boot, even a small change can break things for users still relying on the older version.<\/p>\n\n\n\n<p>If you&#8217;re new to Spring Boot and want to build a strong foundation before diving deeper into concepts like versioning, this <a href=\"https:\/\/www.guvi.in\/courses\/web-development\/spring-boot\/?utm_source=blog&amp;utm_medium=organic&amp;utm_campaign=mastering_api_versioning_in_spring_boot\" target=\"_blank\" rel=\"noreferrer noopener\">Spring Boot course<\/a> is a great place to start.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Common Ways to Version an API<\/strong><\/h2>\n\n\n\n<p>There\u2019s no single API Versioning in Spring Boot. Below are four popular methods you can use for API Versioning in Spring Boot:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Strategy<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>URL\/Request Example<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>RESTful<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>Caching<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>Common Use<\/strong><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>URI Path Versioning<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">\/api\/v1\/products<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u274c<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u2705<\/td><td class=\"has-text-align-center\" data-align=\"center\">Most common<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Request Parameter<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">\/api\/products?version=1<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u274c<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u2705<\/td><td class=\"has-text-align-center\" data-align=\"center\">Easy testing<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Custom Header<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">X-API-VERSION: 1<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u2705<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u274c<\/td><td class=\"has-text-align-center\" data-align=\"center\">Internal APIs<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Accept Header (MIME Type)<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">Accept: application\/vnd.store.v1+json<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u2705<\/td><td class=\"has-text-align-center\" data-align=\"center\">\u274c<\/td><td class=\"has-text-align-center\" data-align=\"center\">Advanced REST<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Each method of versioning has its pros and cons. Choosing the right one depends on your project and team preferences.<\/p>\n\n\n\n<p>And if you&#8217;re preparing for a job interview or want to quickly brush up on Spring Boot basics, you\u2019ll find this list of <a href=\"https:\/\/www.guvi.in\/blog\/spring-boot-questions-and-answers\/\" target=\"_blank\" rel=\"noreferrer noopener\">Spring Boot questions and answers<\/a> helpful.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>1. URI Path Versioning<\/strong><\/h2>\n\n\n\n<p>This is the most common and simple way for API Versioning in Spring Boot.<\/p>\n\n\n\n<p><strong>Example:<\/strong><\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<p>CopyEdit<\/p>\n\n\n\n<p>\/api\/v1\/products<\/p>\n\n\n\n<p>\/api\/v2\/products<\/p>\n\n\n\n<p><strong>Code Example:<\/strong><\/p>\n\n\n\n<p><a href=\"https:\/\/www.guvi.in\/blog\/introduction-to-java\/\" target=\"_blank\" rel=\"noreferrer noopener\">java<\/a><\/p>\n\n\n\n<p>CopyEdit<\/p>\n\n\n\n<p>@RestController<\/p>\n\n\n\n<p>@RequestMapping(&#8220;\/api\/v1\/products&#8221;)<\/p>\n\n\n\n<p>public class ProductV1Controller {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;@GetMapping<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public String getProducts() {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#8220;Product list from API V1&#8221;;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>@RestController<\/p>\n\n\n\n<p>@RequestMapping(&#8220;\/api\/v2\/products&#8221;)<\/p>\n\n\n\n<p>public class ProductV2Controller {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;@GetMapping<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public String getProducts() {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#8220;Product list from API V2 (includes price)&#8221;;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p><strong>Pros:<\/strong><\/p>\n\n\n\n<ul>\n<li>Easy to understand<\/li>\n\n\n\n<li>Works well with Swagger and API docs<\/li>\n<\/ul>\n\n\n\n<p><strong>Cons:<\/strong><\/p>\n\n\n\n<ul>\n<li>URLs can get messy<\/li>\n\n\n\n<li>Breaks the REST idea of clean, resource-based URLs<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>2. Request Parameter Versioning<\/strong><\/h2>\n\n\n\n<p>Here, the version is passed as a query parameter.<\/p>\n\n\n\n<p><strong>Example:<\/strong><\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<p>CopyEdit<\/p>\n\n\n\n<p>\/api\/products?version=1<\/p>\n\n\n\n<p><strong>Code Example:<\/strong><\/p>\n\n\n\n<p>java<\/p>\n\n\n\n<p>CopyEdit<\/p>\n\n\n\n<p>@RestController<\/p>\n\n\n\n<p>@RequestMapping(&#8220;\/api\/products&#8221;)<\/p>\n\n\n\n<p>public class ProductParamVersioningController {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;@GetMapping(params = &#8220;version=1&#8221;)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public String getV1() {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#8220;Product API &#8211; V1 (basic)&#8221;;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;@GetMapping(params = &#8220;version=2&#8221;)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public String getV2() {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#8220;Product API &#8211; V2 (with details)&#8221;;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p><strong>Pros:<\/strong><\/p>\n\n\n\n<ul>\n<li>Keeps the URL cleaner<\/li>\n\n\n\n<li>Easy for testing or trying out different versions<\/li>\n<\/ul>\n\n\n\n<p><strong>Cons:<\/strong><\/p>\n\n\n\n<ul>\n<li>Not fully RESTful<\/li>\n\n\n\n<li>May confuse some API tools<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>3. Custom Header Versioning<\/strong><\/h2>\n\n\n\n<p>In this method, the version is passed through a custom header.<\/p>\n\n\n\n<p><strong>Example:<\/strong><\/p>\n\n\n\n<p>pgsql<\/p>\n\n\n\n<p>CopyEdit<\/p>\n\n\n\n<p>Header: X-API-VERSION: 1<\/p>\n\n\n\n<p><strong>Code Example:<\/strong><\/p>\n\n\n\n<p>java<\/p>\n\n\n\n<p>CopyEdit<\/p>\n\n\n\n<p>@RestController<\/p>\n\n\n\n<p>@RequestMapping(&#8220;\/api\/products&#8221;)<\/p>\n\n\n\n<p>public class ProductHeaderVersioningController {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;@GetMapping(headers = &#8220;X-API-VERSION=1&#8221;)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public String getV1() {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#8220;Product V1 &#8211; via Header&#8221;;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;@GetMapping(headers = &#8220;X-API-VERSION=2&#8221;)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public String getV2() {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#8220;Product V2 &#8211; via Header&#8221;;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p><strong>Pros:<\/strong><\/p>\n\n\n\n<ul>\n<li>URLs stay clean<\/li>\n\n\n\n<li>Follows RESTful design<\/li>\n<\/ul>\n\n\n\n<p><strong>Cons:<\/strong><\/p>\n\n\n\n<ul>\n<li>Not cache-friendly<\/li>\n\n\n\n<li>Harder to test in tools like Postman without setup<\/li>\n<\/ul>\n\n\n\n<p>This method keeps URLs clean and follows REST principles, but debugging can be tricky if your tools don\u2019t support custom headers well.<\/p>\n\n\n\n<p>In real-world systems, APIs don\u2019t just need to be clean; they also need to handle failures well. If you\u2019re interested in building more resilient APIs, check out this guide on <a href=\"https:\/\/www.guvi.in\/blog\/using-resilience4j-in-spring-boot\/\" target=\"_blank\" rel=\"noreferrer noopener\">using Resilience4j in Spring Boot<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>4. Accept Header \/ Media Type Versioning<\/strong><\/h2>\n\n\n\n<p>This is the most advanced method. The version is set in the Accept header using a custom <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Guides\/MIME_types\" target=\"_blank\" data-type=\"link\" data-id=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/HTTP\/Guides\/MIME_types\" rel=\"noreferrer noopener\">MIME type<\/a>.<\/p>\n\n\n\n<p><strong>Example:<\/strong><\/p>\n\n\n\n<p>bash<\/p>\n\n\n\n<p>CopyEdit<\/p>\n\n\n\n<p>Accept: application\/vnd.store.v1+json<\/p>\n\n\n\n<p><strong>Code Example:<\/strong><\/p>\n\n\n\n<p>java<\/p>\n\n\n\n<p>CopyEdit<\/p>\n\n\n\n<p>@RestController<\/p>\n\n\n\n<p>@RequestMapping(&#8220;\/api\/products&#8221;)<\/p>\n\n\n\n<p>public class ProductMediaTypeVersioningController {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;@GetMapping(produces = &#8220;application\/vnd.store.v1+json&#8221;)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public String getV1() {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#8220;Product V1 &#8211; via MIME type&#8221;;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;@GetMapping(produces = &#8220;application\/vnd.store.v2+json&#8221;)<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;public String getV2() {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return &#8220;Product V2 &#8211; via MIME type&#8221;;<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;}<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p><strong>\u2705 Pros:<\/strong><\/p>\n\n\n\n<ul>\n<li>Clean and RESTful<\/li>\n\n\n\n<li>Uses content negotiation<\/li>\n<\/ul>\n\n\n\n<p><strong>\u274c Cons:<\/strong><\/p>\n\n\n\n<ul>\n<li>Complex for beginners<\/li>\n\n\n\n<li>Needs proper documentation<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Which Versioning Strategy Should You Use?<\/strong><\/h2>\n\n\n\n<p>Choose the API Versioning in Spring Boot method that fits your use case and your team\u2019s skill level. Just be consistent, don\u2019t mix too many styles in the same project.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Use Case<\/strong><\/td><td><strong>Best Versioning Strategy<\/strong><\/td><\/tr><tr><td>Public-facing API<\/td><td>URI Path Versioning<\/td><\/tr><tr><td>Internal services or microservices<\/td><td>Header or MIME Type Versioning<\/td><\/tr><tr><td>Quick testing or temporary changes<\/td><td>Request Parameter Versioning<\/td><\/tr><tr><td>Advanced API version control<\/td><td>Accept Header (MIME Type)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>BONUS: Using Swagger (SpringDoc) with Versioned APIs<\/strong><\/h2>\n\n\n\n<p>If you&#8217;re using Swagger to document your APIs in Spring Boot (via SpringDoc), you can show different versions of your API clearly.&nbsp;<\/p>\n\n\n\n<p>This is super helpful for developers who want to explore each version.<\/p>\n\n\n\n<p>Here\u2019s how you can do it:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 1: Group APIs by Version<\/strong><\/h3>\n\n\n\n<p>In your application.yml or application.properties, add this to separate the docs:<\/p>\n\n\n\n<p>yaml<\/p>\n\n\n\n<p>CopyEdit<\/p>\n\n\n\n<p>springdoc:<\/p>\n\n\n\n<p>&nbsp;&nbsp;group-configs:<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&#8211; group: v1<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;paths-to-match: \/api\/v1\/**<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&#8211; group: v2<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;paths-to-match: \/api\/v2\/**<\/p>\n\n\n\n<p>This tells SpringDoc to treat \/api\/v1\/** and \/api\/v2\/** as separate groups.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Step 2: Add Version Info in Your Controllers<\/strong><\/h3>\n\n\n\n<p>You can also add metadata to your controllers like this:<\/p>\n\n\n\n<p>java<\/p>\n\n\n\n<p>CopyEdit<\/p>\n\n\n\n<p>@OpenAPIDefinition(<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;info = @Info(title = &#8220;Product API&#8221;, version = &#8220;v1&#8221;)<\/p>\n\n\n\n<p>)<\/p>\n\n\n\n<p>@RestController<\/p>\n\n\n\n<p>@RequestMapping(&#8220;\/api\/v1\/products&#8221;)<\/p>\n\n\n\n<p>public class ProductV1Controller {<\/p>\n\n\n\n<p>&nbsp;&nbsp;&nbsp;&nbsp;\/\/ your code here<\/p>\n\n\n\n<p>}<\/p>\n\n\n\n<p>This makes it super clear in the Swagger <a href=\"https:\/\/www.guvi.in\/blog\/what-is-user-interface\/\" target=\"_blank\" rel=\"noreferrer noopener\">UI<\/a> what version each endpoint belongs to.<\/p>\n\n\n\n<p><strong>Tip:<\/strong> Keep your service classes the same for all versions. Only your controllers should handle version changes. This keeps your code clean and easier to maintain.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conclusion<\/strong><\/h2>\n\n\n\n<p>API Versioning in Spring Boot may seem like a small detail, but it plays a big role in keeping your app stable as it grows.&nbsp;<\/p>\n\n\n\n<p>It helps you improve your API over time without breaking anything for users still on the older versions.<\/p>\n\n\n\n<p>In Spring Boot, you have many ways to handle versioning, like path, parameters, headers, or media types.&nbsp;<\/p>\n\n\n\n<p>There\u2019s no one \u201cperfect\u201d way for API Versioning in Spring Boot. The right choice depends on your project\u2019s needs and who\u2019s using your API.<\/p>\n\n\n\n<p>If you want to try a real-world Spring Boot project, <a href=\"https:\/\/www.guvi.in\/courses\/programming\/api-for-authentication-system-using-spring-boot\/?utm_source=blog&amp;utm_medium=organic&amp;utm_campaign=mastering_api_versioning_in_spring_boot\" target=\"_blank\" rel=\"noreferrer noopener\">building an API for an authentication system using Spring Boot<\/a> is a great next step.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Frequently Asked Questions<\/strong><\/h2>\n\n\n\n<p><strong>1. Is API Versioning in Spring Boot necessary for small projects?<br><\/strong>Even if your project is small now, it may grow later. Adding versioning early helps you avoid problems in the future.<\/p>\n\n\n\n<p><strong>2. What\u2019s the easiest way to version APIs in Spring Boot?<\/strong><strong><br><\/strong>Using the URL path method (like \/api\/v1\/) is the easiest and most beginner-friendly way.<\/p>\n\n\n\n<p><strong>3. Can I change the versioning method later?<\/strong><strong><br><\/strong>Yes, but it&#8217;s better to pick one method and stick with it. Changing versioning styles later can confuse users and break clients that depend on the current format.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>As your application grows, your APIs will need to change, maybe to add new features or fix old ones.&nbsp; But if you update your APIs without any control, you might end up breaking things for users who are still using the older version. That\u2019s where API Versioning in Spring Boot comes in. It helps you [&hellip;]<\/p>\n","protected":false},"author":36,"featured_media":81781,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[907],"tags":[],"views":"2349","authorinfo":{"name":"Chittaranjan Ghosh","url":"https:\/\/www.guvi.in\/blog\/author\/chittaranjan-ghosh\/"},"thumbnailURL":"https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2025\/06\/API-Versioning-in-Spring-Boot-300x112.webp","jetpack_featured_media_url":"https:\/\/www.guvi.in\/blog\/wp-content\/uploads\/2025\/06\/API-Versioning-in-Spring-Boot.webp","_links":{"self":[{"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/posts\/81766"}],"collection":[{"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/users\/36"}],"replies":[{"embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/comments?post=81766"}],"version-history":[{"count":9,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/posts\/81766\/revisions"}],"predecessor-version":[{"id":86655,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/posts\/81766\/revisions\/86655"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/media\/81781"}],"wp:attachment":[{"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/media?parent=81766"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/categories?post=81766"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.guvi.in\/blog\/wp-json\/wp\/v2\/tags?post=81766"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}